package com.deco.back.controller.security;

import com.deco.domain.vo.constants.DecoMessageConstants;
import com.free.common.vo.ResultModel;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import tk.mybatis.mapper.util.StringUtil;

import javax.servlet.http.HttpServletRequest;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
@Controller
@RequestMapping(value = "/security")
public class LoginController {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

    @RequestMapping(value = "/login.jhtml", method = RequestMethod.POST)
    public ModelAndView loginPage(HttpServletRequest request, Model model){
        ModelAndView view = new ModelAndView("login");
        // shiro 认证失败的场合下的例外信息
        String exception = (String) request.getAttribute(FormAuthenticationFilter.DEFAULT_ERROR_KEY_ATTRIBUTE_NAME);
        return view;
    }

    @RequestMapping(value = "/login.ahtml", method = RequestMethod.POST)
    @ResponseBody
    public ResultModel loginAjax(HttpServletRequest request,Model model){
        // shiro 认证失败的场合下的例外信息
        String exception = (String) request.getAttribute(FormAuthenticationFilter.DEFAULT_ERROR_KEY_ATTRIBUTE_NAME);
        if(StringUtil.isEmpty(exception)){
            return ResultModel.success();
        }else{
            if(exception.indexOf("EmptyCaptchaException")>= 0){
                return ResultModel.failure(DecoMessageConstants.E010001);
            }else if(exception.indexOf("IncorrectCaptchaException") >= 0){
                return ResultModel.failure(DecoMessageConstants.E010002);
            }
            return ResultModel.failure(DecoMessageConstants.E010004);
        }
    }

    @RequestMapping(value="/logout")
    public String logOut(){
        SecurityUtils.getSubject().logout();
        return "redirect:/";
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
